package cn.zwk.drawing.domain.diagram.model;

import lombok.Data;
import lombok.Builder;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 架构图领域实体
 */
@Data
@Builder
public class DiagramDefinition {
    
    /**
     * 图表唯一标识
     */
    private String diagramId;
    
    /**
     * 图表名称
     */
    private String name;
    
    /**
     * PlantUML源码内容
     */
    private String plantUmlContent;
    
    /**
     * 图表类型
     */
    private DiagramType type;
    
    /**
     * 图表中的节点列表
     */
    private List<DiagramNode> nodes;
    
    /**
     * 图表中的连接关系
     */
    private List<DiagramConnection> connections;
    
    /**
     * 图表元数据
     */
    private Map<String, Object> metadata;
    
    /**
     * 版本信息
     */
    private String version;
    
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    
    /**
     * 最后修改时间
     */
    private LocalDateTime lastModified;
    
    /**
     * 验证图表定义的完整性
     */
    public boolean isValid() {
        return diagramId != null && 
               name != null && 
               plantUmlContent != null && 
               !plantUmlContent.trim().isEmpty();
    }
    
    /**
     * 获取节点数量
     */
    public int getNodeCount() {
        return nodes != null ? nodes.size() : 0;
    }
    
    /**
     * 根据ID查找节点
     */
    public DiagramNode findNodeById(String nodeId) {
        if (nodes == null) return null;
        return nodes.stream()
                .filter(node -> nodeId.equals(node.getNodeId()))
                .findFirst()
                .orElse(null);
    }
}